package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;

import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

import com.example.myapplication.broadcast.MyBroadcastReceiver;

/**
 * 广播的使用场景主要用于app之前的消息通讯以及一些页面的跳转，
 * 避免进行耗时长的操作，否则会造成ANR（应用没有回应）的问题
 */
public class BroadcastReceiverActivity extends AppCompatActivity implements View.OnClickListener {

    private final String ACTION_BOOT = "com.example.myapplication.MY_BROADCAST";
    private MyBroadcastReceiver receiver;
    private EditText pwd;
    private EditText name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast_receiver);
        // 按钮监听
        name = findViewById(R.id.username1);
        pwd = findViewById(R.id.password1);
        register();
        //broadcast();
        findViewById(R.id.login1).setOnClickListener(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    /**
     * 动态注册广播
     */
    public void register(){
        IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_BOOT);
        filter.addAction("GUANGBO");
        filter.addAction(Intent.ACTION_BATTERY_CHANGED);
        receiver = new MyBroadcastReceiver();
        registerReceiver(receiver, filter);
    }

    /**
     * 动态发送广播
     */
    public void send(){
        Intent intent = new Intent();
        // action和filter的action保持一致
        intent.setAction(ACTION_BOOT);
        Bundle bundle = new Bundle();
        intent.putExtra("name",name.getText().toString());
        intent.putExtra("pwd",pwd.getText().toString());
        sendBroadcast(intent);
    }

    /**
     * 动态销毁广播
     */
    public void unregister(){
        unregisterReceiver(receiver);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("销毁","receiver");
        unregisterReceiver(receiver);
        Log.i("销毁","receiver");
    }

    @Override
    public void onClick(View view) {
        //broadcast();
        send();
    }

    /**
     * 全局广播
     */
    public void broadcast(){
        Intent intent = new Intent();
        intent.setAction(ACTION_BOOT);
        intent.putExtra("name",name.getText().toString());
        intent.putExtra("pwd",pwd.getText().toString());
        /**
         * Android 8.0或者更高版本，发送广播的条件更加严苛，必须添加这一行内容
         * 第1个参数是指接收广播类的包名，第2个参数是指接收广播类的完整类名
         */
        intent.setComponent(new ComponentName(getPackageName(),getPackageName() + ".broadcast.MyBroadcastReceiver"));
        Log.i("d",getPackageName());
        sendBroadcast(intent);
    }

    /**
     * 注册应用内广播接收器
     */
    public void localBroadcast(){
        //步骤1：实例化BroadcastReceiver子类 & IntentFilter myBroadcastReceiver
        MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        //步骤2：实例化LocalBroadcastManager的实例
        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
        //步骤3：设置接收广播的类型
        intentFilter.addAction("com.example.myapplication.MY_BROADCAST");
        //步骤4：调用LocalBroadcastManager单一实例的registerReceiver（）方法进行动态注册
        localBroadcastManager.registerReceiver(myBroadcastReceiver, intentFilter);
        //取消注册应用内广播接收器
        //localBroadcastManager.unregisterReceiver(myBroadcastReceiver);
        //发送应用内广播
        Intent intent = new Intent();
        intent.setAction("com.example.myapplication.MY_BROADCAST");
        localBroadcastManager.sendBroadcast(intent);
    }

    /**
     * 来梧桐一个月感受：不知不觉已经过去一个月了，在这段时间里，我在梧桐收获了不少的东西。我感觉我已经从之前的学校生活走进了职场中，自己内心也渐渐成熟了起来。要开始自己独立生活了，
     * 这当然离不开自己所从事的工作。在梧桐的一个月里，我不仅掌握了所从事工作的技能，还认识了不少的同事。从他们身上我收获了在职场中应具备的技能。这可以会长期伴随我的一生。在工作中
     * 要实时保持良好的状态。认真做好工作中的每一件事情，要在工作中寻找乐趣，也要始终保持学习的状态。总之，该工作的时候就全身心投入状态，该放松的时候就放松。在梧桐以后的时光中，我会
     * 一直保持这种积极的状态去工作。我相信以后在梧桐会收获更多的东西。
     */

}